<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

abstract class ControladorKakoonAdmin extends CI_Controller
{
    public $publico = false;

    public function __construct()
    {
        parent::__construct();

        bemarx();
    }

    public abstract function getParametrosFormulario ($identificador = Datos::NO_PERSISTIDO);
    public abstract function getParametrosListado();
    public abstract function getObjetoDatos ($identificador = Datos::NO_PERSISTIDO);
    public abstract function getBaseUrl();

    public function index ($parametro = null)
    {
        listado();

        $this->analizaArgumentos ($parametro);

        $parametros = $this->getParametrosListado();
        $vista      = new TablaKakoon($this->getObjetoDatos(), $parametros->getBotones(), $parametros->getCondiciones(), $parametros->getAnulados(), $parametros->getNoFiltrar());
        $vista      = $this->analizaVistaListado ($vista);
        $modelo     = array();

        $modelo["contenido"] = $vista->getXHTML();
        $modelo["js"]        = JS::incluyeJQueryI18N("/BemarxJS/");
        $modelo["js"]       .= JS::incluyeJQueryTimePicker("/BemarxJS/");

        $this->vista ($modelo);
    }

    public function gestionar ($identificador = Datos::NO_PERSISTIDO)
    {
        formulario();

        $parametros = $this->getParametrosFormulario ($identificador);
        $datos      = $this->getObjetoDatos($identificador);
        $datos->recupera($this->recuperaIdentificador($datos));

        $clase = get_class ($datos);
        $vista = new FormularioKakoon($datos);

        foreach ($parametros->getAnulados() as $unAnulado)
        {
            $vista->anula ($unAnulado);
        }

        $vista = $this->analizaVistaFormulario ($vista);
        $vista->popula();

        if ($vista->datosValidos())
        {
            $clase = $vista->getDatos();
            $clase = $this->analizaDatosFormulario ($vista, $clase);
            $clase->consolida();

            redirect (site_url ("/". $this->getBaseUrl() ."/"));
            exit();
        }

        $modelo = array();
        $modelo["contenido"] = $vista->creaFormulario (site_url("/". $this->getBaseUrl() ."/gestionar/"));
        $modelo["js"]        = JS::incluyeJQueryI18N("/BemarxJS/");
        $modelo["js"]       .= JS::incluyeJQueryTimePicker("/BemarxJS/");
        $modelo["js"]       .= JS::incluyeJQueryHTMLEditor("/BemarxJS/");
        $modelo["js"]       .= JS::incluyeValidacionJS("/BemarxJS/");

        $this->vista ($modelo);
    }

    public function borrar ($identificador)
    {
        $datos = $this->getObjetoDatos($identificador);
        $datos->purga();

        redirect(site_url($this->getBaseUrl()));
        exit();
    }

    protected function vista ($modelo = array())
    {
        $modelo["titulo"]     = ModeloMisDatosKakoon::getNombre (getAccesoBD());
        $modelo["menu"]       = $this->generaMenu()->toXHTML();
        $modelo["opciones"]   = $this->generaOpciones();
        $modelo["js"]         = $this->getJS($modelo);

        $this->load->view ("administracion/cabecera",    $modelo);
        $this->load->view ("administracion/contenido",   $modelo);
        $this->load->view ("administracion/pie",         $modelo);
    }

    protected function vistaContenido ($plantilla, $modelo = array())
    {
        $modelo["titulo"] = ModeloMisDatosKakoon::getNombre (getAccesoBD());
        $modelo["menu"]   = $this->generaMenu()->toXHTML();
        $modelo["js"]     = $this->getJS($modelo);

        $this->load->view ("administracion/cabecera",     $modelo);
        $this->load->view ("administracion/".$plantilla,  $modelo);
        $this->load->view ("administracion/pie",          $modelo);
    }

    protected function recuperaIdentificador(Datos $datos)
    {
        $retorno = $datos->getIdentificador();
        $nombre  = get_class ($datos) ."_". $datos->getClavePrimaria();

        if (isset ($_REQUEST[$nombre]) && Soporte::contieneValor($_REQUEST[$nombre]))
        {
            $retorno = $_REQUEST[$nombre];
        }

        return $retorno;
    }

    protected function analizaDatosFormulario (FormularioKakoon $vista, Datos $datos)
    {
        return $datos;
    }

    protected function analizaVistaFormulario (FormularioKakoon $vista)
    {
        return $vista;
    }

    protected function analizaVistaListado (TablaKakoon $vista)
    {
        return $vista;
    }

    protected function analizaArgumentos ($parametro = null)
    {}

    protected function generaMenu()
    {
        $retorno = "";

        $modelo       = new ModeloModuloKakoon(getAccesoBD());
        $secciones    = $modelo->getMenu();
        $menu         = new MenuKakoon();

        $menu->anyadeItem("Secciones",        "Ver Secciones",            site_url("/administracion/secciones/"));
        $menu->anyadeItem("Secciones",        "Crear Nueva Seccion",      site_url("/administracion/secciones/gestionar/"));
        $menu->anyadeItem("Configuracion",    "Menu Pagina Web",          site_url("/administracion/menus/"));
        $menu->anyadeItem("Configuracion",    "Cambiar Mis Datos",        site_url("/administracion/misdatos/"));
        $menu->anyadeItem("Configuracion",    "Cambiar Clave de Acceso",  site_url("/administracion/acceso/"));
        $menu->anyadeItem("Modulos",          "Ver Modulos",              site_url("/administracion/modulos/"));
        $menu->anyadeItem("Modulos",          "Instalar Modulos",         site_url("/administracion/modulos/instalacion/"));

        foreach ($secciones as $seccion => $items)
        {
            foreach ($items as $titulo => $url)
            {
                $menu->anyadeItem($seccion, $titulo, $url);
            }
        }

        $retorno = $menu;

        return $retorno;
    }

    protected function generaOpciones()
    {
        $retorno = "";

        $menu      = $this->generaMenu();
        $secciones = $menu->getSecciones();
        $urlActual = site_url($this->getBaseUrl());
        $opciones  = array();
         
        foreach ($secciones as $seccion => $items)
        {
            foreach ($items as $titulo => $url)
            {
                if ($urlActual == $url)
                {
                    $opciones = $menu->getSeccion ($seccion);
                    break;
                }
            }
            
            if (count($opciones) > 0)
            {
                break;
            }
        }
        
        foreach ($opciones as $opcion => $url)
        {
            $retorno .= Soporte::creaEnlaceTexto($opcion, $url, "class='texto_azul'");
        }

        return $retorno;
    }

    protected function getJS ($modelo = array())
    {
        $retorno  = JS::incluyeJQuery("/BemarxJS/");
        $retorno .= JS::incluyeJQueryCookie("/BemarxJS/");
        $retorno .= JS::creaEnlaceJS(site_url("/js/menu.kakoon.js"));
        $retorno .= JS::creaEnlaceJS(site_url("/js/jquery.modal.js"));

        if (isset($modelo["js"]))
        {
            $retorno .= $modelo["js"];
        }

        return $retorno;
    }
}

/* End of file administracion/controladorkakoonadmin.php */
/* Location: ./application/controllers/administracion/controladorkakoonadmin.php */
?>